﻿#ifndef BLOCKGROUP_H
#define BLOCKGROUP_H

#include <QObject>
#include <QGraphicsItemGroup>

class Block;

/********************************************************
 * @ClassName:  BlockGroup
 * @Brief:      基本方块组成的方块组，无法移动，用作展示
 *              原则：方块组必须局限于4×4的格子内
 * @date        2022/01/21
 ********************************************************/
class BlockGroup : public QObject, public QGraphicsItemGroup
{
    Q_OBJECT
public:
    enum BlockShape{
        //经典类型，由4个方块组成
        shape_I,          // 竖线，青色
        shape_O,          // O型，黄色
        shape_T,          // T型，紫色
        shape_S,          // S型，绿色
        shape_Z,          // Z型，红色
        shape_J,          // J型，蓝色
        shape_L,          // L型，橙色
        //扩展类型
        shape_T2,         // 扩展T型，由5个方块组成
        shape_TR,         // 凹形，由5个方块组成
        shape_I2,         // 扩展竖线，由2个方块组成
        shape_I3,         // 扩展竖线，由3个方块组成
    };
    Q_ENUM(BlockShape)

    explicit BlockGroup(const QPointF &point, QObject *parent = nullptr);

    void newShape();        //生成新的随机形状

    int rotation() const;

    BlockShape blockshape() const;

    QRectF boundingRect() const;


    int ballNum() const;

protected:
    QPointF startPos;           //方块的起始位置
    BlockShape m_blockshape;    //形状（随机）
    int m_rotation;             //角度（随机）

    QList<Block *> m_blockList;
    QList<QColor> colorTable;   //色彩表


    void blockListRemake();        //重建方块组（包括重建形状）
    void blockListCreate(int num, const QColor &brushColor = Qt::red, BlockType blockType = NormalBlock);       //重建方块组

    void moveBlockFromGroup();
    void deleteBlockFromGroup();

    bool isCollding() const;    //是否发生碰撞

    int m_ballNum = 0;
};

#endif // BLOCKGROUP_H
